#-*- coding: utf-8 -*-
from ListeChainee import *

class Lifo(object):
	def __init__(self, *args):
		"""
		Crée une pile (Last In, First Out).
		Le premier argument sera celui au sommet de la pile.
		"""
		self.ll = ListeChainee(*args)
	
	def push(self, n):
		"""Empile un élément"""
		self.ll.insertBeginning(n)

	def pop(self):
		"""Dépile un élément"""
		try:
			return self.ll.removeBeginning()
		except:
			raise IndexError("Plus possible de dépiler !")
	
	def top(self):
		"""Retourne le dernier élément empilé"""
		try:
			return self.ll.get(0)
		except:
			raise IndexError("Rien sur la pile !")
	
	def __str__(self):
		"""Retourne une version textuelle de la pile (top en haut)"""
		s = ""
		#proprement, faudrait utiliser un itérateur !
		#mais vu que le comportement est quasi-identique...
		p = self.ll.head
		while p:
			s += str(p.data) + "\n"
			p = p.next
		return s[:-1]
